using System;
using System.Collections.Generic;
using System.ComponentModel;
using Microsoft.Ccr.Core;
using Microsoft.Dss.Core.Attributes;
using Microsoft.Dss.ServiceModel.Dssp;
using Microsoft.Dss.ServiceModel.DsspServiceBase;
using W3C.Soap;

using dssp = Microsoft.Dss.ServiceModel.Dssp;
using submgr = Microsoft.Dss.Services.SubscriptionManager;
using bumper = Microsoft.Robotics.Services.ContactSensor.Proxy;

namespace UrbanBumper
{
    public sealed class Contract
    {
        [DataMember]
        public const string Identifier = "http://schemas.tempuri.org/2008/09/urbanbumper.html";
    }

    [DataContract]
    public class UrbanBumperState
    {
    }


    [ServicePort]
    public class UrbanBumperOperations : PortSet<DsspDefaultLookup, DsspDefaultDrop, Subscribe, Connect, ContactSensorUpdate, ContactSensorReplace>
    {
    }

    public class Get : Get<GetRequestType, PortSet<bumper.ContactSensor, Fault>>
    {
        public Get()
        {
        }

        public Get(GetRequestType body)
            : base(body)
        {
        }

        public Get(GetRequestType body, PortSet<bumper.ContactSensor, Fault> responsePort)
            : base(body, responsePort)
        {
        }
    }

    public class Connect : Update<UrbanBumperState, PortSet<DefaultUpdateResponseType, Fault>>
    {
        public Connect()
        {
        }

        public Connect(UrbanBumperState body)
            : base(body)
        {
        }
    }

    public class ContactSensorUpdate : Update<bumper.ContactSensor, PortSet<DefaultUpdateResponseType, Fault>>
    {
        public ContactSensorUpdate()
        {
        }

        public ContactSensorUpdate(bumper.ContactSensor body)
            : base(body)
        {
        }
    }

    public class ContactSensorReplace : Replace<bumper.ContactSensorArrayState, PortSet<DefaultReplaceResponseType, Fault>>
    {
        public ContactSensorReplace()
        {
        }

        public ContactSensorReplace(bumper.ContactSensorArrayState body)
            : base(body)
        {
        }
    }

    public class Subscribe : Subscribe<SubscribeRequestType, PortSet<SubscribeResponseType, Fault>>
    {
    }
}
